package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.product.entity.SkuAttrValue;
import com.atguigu.gmall.product.entity.SkuImage;
import com.atguigu.gmall.product.entity.SkuSaleAttrValue;
import com.atguigu.gmall.product.service.SkuAttrValueService;
import com.atguigu.gmall.product.service.SkuImageService;
import com.atguigu.gmall.product.service.SkuSaleAttrValueService;
import com.atguigu.gmall.product.vo.SkuInfoVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.gmall.product.entity.SkuInfo;
import com.atguigu.gmall.product.service.SkuInfoService;
import com.atguigu.gmall.product.mapper.SkuInfoMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 *
 */
@Service
public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoMapper, SkuInfo>
    implements SkuInfoService{

    @Autowired
    SkuSaleAttrValueService skuSaleAttrValueService;

    @Autowired
    SkuAttrValueService skuAttrValueService;

    @Autowired
    SkuImageService skuImageService;

    @Transactional
    @Override
    public void saveSkuInfo(SkuInfoVo skuInfoVo) {
        //1. 信息存在sku_info表
        SkuInfo skuInfo = new SkuInfo();
        BeanUtils.copyProperties(skuInfoVo,skuInfo);
        save(skuInfo);

        Long skuId = skuInfo.getId();

        //2. 信息存在sku_attr_value表
        List<SkuInfoVo.SkuAttrValueListDTO> skuAttrValueVoList = skuInfoVo.getSkuAttrValueList();
        List<SkuAttrValue> skuAttrValueList = new ArrayList<>();
        for (SkuInfoVo.SkuAttrValueListDTO skuAttrValueVo:skuAttrValueVoList){
            SkuAttrValue skuAttrValue = new SkuAttrValue();
            BeanUtils.copyProperties(skuAttrValueVo,skuAttrValue);
            skuAttrValue.setSkuId(skuId);
            skuAttrValueList.add(skuAttrValue);
        }
        skuAttrValueService.saveBatch(skuAttrValueList);

        //3. 信息存在sku_image表
        List<SkuInfoVo.SkuImageListDTO> skuImageVoList = skuInfoVo.getSkuImageList();
        List<SkuImage> skuImageList = new ArrayList<>();
        for (SkuInfoVo.SkuImageListDTO skuImageVo: skuImageVoList){
            SkuImage skuImage = new SkuImage();
            BeanUtils.copyProperties(skuImageVo,skuImage);
            skuImage.setSkuId(skuId);
            skuImageList.add(skuImage);
        }
        skuImageService.saveBatch(skuImageList);

        //4. 信息存在sku_sale_attr_value表
        List<SkuInfoVo.SkuSaleAttrValueListDTO> skuSaleAttrValueVoList = skuInfoVo.getSkuSaleAttrValueList();
        List<SkuSaleAttrValue> skuSaleAttrValueList = new ArrayList<>();
        for (SkuInfoVo.SkuSaleAttrValueListDTO skuSaleAttrValueVo: skuSaleAttrValueVoList){
            SkuSaleAttrValue skuSaleAttrValue = new SkuSaleAttrValue();
            skuSaleAttrValue.setSkuId(skuId);
            skuSaleAttrValue.setSkuId(skuInfo.getSpuId());
            skuSaleAttrValue.setSaleAttrValueId(skuSaleAttrValueVo.getSaleAttrValueId());
            skuSaleAttrValueList.add(skuSaleAttrValue);
        }
        skuSaleAttrValueService.saveBatch(skuSaleAttrValueList);
    }
}




